package com.tarena.test.luban.demo.order.rpc;

import com.tarena.luban.demo.cart.api.DubboTestRpcApi;
import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
import org.springframework.context.annotation.Bean;

/**
 * dubbo调用远程方法的消费端 客户端
 */
public class Consumer {
    public static void main(String[] args) {
        //最终就负责调用 模拟对象注入的场景 service业务层可以调用 controller控制层 repo
        DubboTestRpcApi testRpcApi = getApi();
        String result = testRpcApi.sayHi("王翠花");
        System.out.println("获取sayHi方法结果"+result);
        while(true);
    }
    //通过dubbo拿到可以远程调用的接口对象
    //实现逻辑是底层通信 连接
    public static DubboTestRpcApi getApi(){
        //指定配置 消费端的配置类
        ReferenceConfig<DubboTestRpcApi> consumerConfig=new ReferenceConfig<>();
        //只需要设置接口
        consumerConfig.setInterface(DubboTestRpcApi.class);
        //dubbo客户端对象
        DubboBootstrap instance = DubboBootstrap.getInstance();
        //服务信息 调用consumer还是provider 都应该属于某一个dubbo应用
        instance.application("order-consumer");
        //注册中心抓取数据
        instance.registry(new RegistryConfig("nacos://localhost:8848"));
        //在实例中 添加 consumer配置类
        instance.reference(consumerConfig);
        //调用get获取 proxy代理对象
        DubboTestRpcApi dubboTestRpcApi = consumerConfig.get();
        //打印 类名称
        System.out.println(dubboTestRpcApi.getClass().getName());
        return dubboTestRpcApi;
    }
}
